"""
python的内存管理是一个复杂的系统，涉及到内存分配、回收、处理等多个方面
"""
from sys import getsizeof

#   内存分配
# 对象池：会创建一些小对象的对象池，每次分配从池中取，而不需要每次分配
# a = 10
# b = 10
# print((a is b))

# 内存分配器：主要使用pymalloc内存分配器。将内存分配为不同层次。小对象会从预先准备好的内存块中分配，大对象从操作系统分配请求内存



#   内存回收
# # 引用计数：每个对象都有一个引用计数器，记录了有多少变量引用了改对象
# import sys
# a = [1, 2, 3]
# # 输出引用计数，通常会比实际引用数多 1，因为函数调用也会增加引用计数，当引用计数为0时会删除引用
# print(sys.getrefcount(a))
# # 垃圾回收器：Python 还使用了垃圾回收器GC来处理循环引用的问题。Python 的垃圾回收器会定期检查对象之间的引用关系，识别并回收这些循环引用的对象。根据对象的存活时间进行不同频率的检查



#   内存优化
# 生成器和迭代器。减少内存使用。同时提供了内存管理工具如getsizeof()
# gen1 = (i for i in range(1000000))
# print(getsizeof(gen1))
#
# gen2 = [i for i in range(1000000)]
# print(getsizeof(gen2))

